/*
 * Alipay.com Inc. Copyright (c) 2004-2021 All Rights Reserved.
 */
package com.company.exception.base;

import org.springframework.context.MessageSource;
import org.springframework.context.support.ResourceBundleMessageSource;

import java.text.MessageFormat;
import java.util.Locale;

/**
 * 格式化字符串工具类
 *
 * @author poc
 * @version : MessageUtil.java, v 0.1 2023年12月15日 16:11:957 poc Exp $
 */
public class MessageUtil {

    private static MessageSource messageSource = null;

    /**
     * 常量值
     */
    private final static String ENGLISHDEFAULTVALUE = "don't have error message config";

    private final static String CHINESEDEFAULTVALUE ="未配置错误信息";

    static {
        messageSource = new ResourceBundleMessageSource();
        ((ResourceBundleMessageSource) messageSource).setBasenames("config/errorcode");
        ((ResourceBundleMessageSource) messageSource).setDefaultEncoding("UTF-8");
    }

    /**
     * 获取errorCode_en_US.properties有占位符的value
     *
     * @param code  错误码code
     * @param param 占位符的值
     * @return string
     */
    public static String getEnglishMessage(String code, Object[] param) {
        return messageSource.getMessage(code, param, ENGLISHDEFAULTVALUE, Locale.US);
    }

    /**
     * 获取errorCode_en_US.properties无占位符的value
     *
     * @param code 错误码code
     * @return string
     */
    public static String getEnglishMessageNoParam(String code) {
        return messageSource.getMessage(code, null, ENGLISHDEFAULTVALUE, Locale.US);
    }

    /**
     * 获取errorCode_zh_CN.properties有占位符的value
     *
     * @param code 错误码code
     * @return string
     */
    public static String getChineseMessageNoParam(String code) {
        return messageSource.getMessage(code, null, CHINESEDEFAULTVALUE, Locale.SIMPLIFIED_CHINESE);

    }

    /**
     * 获取errorCode_zh_CN.properties有占位符的value
     *
     * @param code  错误码code
     * @param param 占位符的值
     * @return string
     */
    public static String getChineseMessage(String code, Object[] param) {
        return messageSource.getMessage(code, param, CHINESEDEFAULTVALUE, Locale.SIMPLIFIED_CHINESE);

    }

    /**
     * 使用<code>MessageFormat</code>格式化字符串.
     *
     * @param message 要格式化的字符串如:<code>xxx{0},xxx{1}...</code>
     * @param params  参数表数组length与message参数化个数相同, 如:<code>Object[]  object=new Object[]{"xxx","xxx"}</code>
     * @return 格式化的字符串，如果message为<code>null</code>，则返回<code>null</code>
     */
    public static String formatMessage(String message, Object... params) {
        if ((message == null) || (params == null) || (params.length == 0)) {
            return message;
        }

        return MessageFormat.format(message, params);
    }

}